home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Sample Code / Snippets / Devices / CDTool / cdMain.c < prev   
Encoding:
Text File  |  1990-09-14  |  3.1 KB  |  130 lines  |  [TEXT/MPS ]

  1. // imWare
  2. // Wednesday, February 14, 1990
  3. // James Beninghaus
  4.  
  5. #include    <stdio.h>
  6. #include    <string.h>
  7. #include    <ToolUtils.h>
  8. #include    <Errors.h>
  9. #include    <cd.h>
  10.  
  11. #define sUNDEF            0
  12. #define    sDRIVE            1
  13. #define    sPLAY            2
  14. #define    sPAUSE            3
  15. #define    sCONTINUE        4
  16. #define    sSTOP            5
  17. #define    sEJECT            6
  18.  
  19. #define    min(a, b)        (a<b ? a:b)
  20. #define    max(a, b)        (a>b ? a:b)
  21.  
  22. void Usage() {
  23.     printf("cd [-drive 1..6] [-play [1..73 [1..73]] [stereo | mono] | -pause | -continue | -stop | -eject]\n");
  24.     exit(paramErr);
  25. }
  26.  
  27. main (int argc, char *argv[]) {
  28.     
  29.     auto    OSErr    osErr;
  30.     auto    short    drive,
  31.                     ioRefNum,
  32.                     count,
  33.                     track,
  34.                     state;
  35.     auto    Byte    userCDNumber,
  36.                     userStart, 
  37.                     userStop,
  38.                     discStart,
  39.                     discStop,
  40.                     audioStatus,
  41.                     playMode,
  42.                     cntlField,
  43.                     minutes,
  44.                     seconds,
  45.                     frames;
  46.     
  47.     InitGraf((Ptr) &qd.thePort);
  48.     
  49.     state            = sUNDEF;
  50.     userCDNumber    = 1;
  51.     userStart        = 0;
  52.     userStop        = 100;
  53.     playMode        = STEREO;
  54.     
  55.     count = 0;
  56.     while (++count < argc)
  57.         if (0 == strcmp("-drive", argv[count]))
  58.             state = sDRIVE;
  59.         else if (1 == sscanf(argv[count], "%hd", &drive) && 1 <= drive && drive <= 6 && sDRIVE == state) {
  60.             state = sUNDEF;
  61.             userCDNumber = (Byte) drive;
  62.         } else if (0 == strcmp("-play", argv[count]) && sUNDEF == state)
  63.             state = sPLAY;
  64.         else if (1 == sscanf(argv[count], "%hd", &track) && 1 <= track && track <= 73 && sPLAY == state)    
  65.             if (0 == userStart)
  66.                 userStart = (Byte) track;
  67.             else
  68.                 userStop = (Byte) track;
  69.         else if (0 == strcmp("stereo", argv[count]) && sPLAY == state)
  70.             playMode = STEREO;
  71.         else if (0 == strcmp("mono", argv[count]) && sPLAY == state)
  72.             playMode = MONO;
  73.         else if (0 == strcmp("-pause", argv[count]) && sUNDEF == state)
  74.             state = sPAUSE;
  75.         else if (0 == strcmp("-continue", argv[count]) && sUNDEF == state)
  76.             state = sCONTINUE;
  77.         else if (0 == strcmp("-stop", argv[count]) && sUNDEF == state)
  78.             state = sSTOP;
  79.         else if (0 == strcmp("-eject", argv[count]) && sUNDEF == state)
  80.             state = sEJECT;
  81.         else
  82.             Usage();
  83.  
  84.     osErr = OpenCD(userCDNumber, &ioRefNum);
  85.     if (noErr == osErr)
  86.         switch (state) {
  87.             case sUNDEF :
  88.             case sDRIVE :
  89.             case sPLAY :
  90.                 osErr = TrackCount(ioRefNum, &discStop);
  91.                 if (noErr == osErr) {
  92.                     discStart = 0; 
  93.                     do 
  94.                         osErr = TrackInfo(ioRefNum, ++discStart, &cntlField, &minutes, &seconds, &frames);
  95.                     while (BitTst(&cntlField, 5) && noErr == osErr); 
  96.                     if (noErr == osErr) {
  97.                         osErr = AStop(ioRefNum, max(min(userStop, discStop), discStart));
  98.                         if (noErr == osErr) 
  99.                             osErr = APlay(ioRefNum, min(max(userStart, discStart), discStop), playMode);
  100.                     }
  101.                 }
  102.                 break;
  103.             case sPAUSE :
  104.                 osErr = AStatus(ioRefNum, &audioStatus, &playMode, &cntlField, &minutes, &seconds, &frames);
  105.                 if (noErr == osErr)
  106.                     if (PLAYING == audioStatus)
  107.                         osErr = APause(ioRefNum, PAUSE);
  108.                 break;
  109.             case sCONTINUE :
  110.                 osErr = AStatus(ioRefNum, &audioStatus, &playMode, &cntlField, &minutes, &seconds, &frames);
  111.                 if (noErr == osErr)
  112.                     if (PAUSED == audioStatus) 
  113.                         osErr = APause(ioRefNum, CONTINUE);
  114.                 break;
  115.             case sSTOP :
  116.                 osErr = AStop(ioRefNum, 0);
  117.                 break;
  118.             case sEJECT :
  119.                 osErr = EjectCD(ioRefNum);
  120.                 break;
  121.         }
  122.     exit(osErr);
  123. }
  124.  
  125.     
  126.     
  127.  
  128.     
  129.         
  130.